package com.example.cartservice.service.Impl;


import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.cartservice.domain.entity.Good;
import com.example.cartservice.mapper.CartMapper;
import com.example.cartservice.service.ICartService;
import jakarta.annotation.Resource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 购物车服务实现类
 * 提供商品信息的缓存和查询服务
 *
 * @author czwa
 */
@Service
public class CartServiceImpl extends ServiceImpl<CartMapper, Good> implements ICartService {

    @Resource
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 获取所有商品信息
     * 优先从Redis缓存中获取，若缓存不存在则从数据库查询并缓存
     *
     * @return 商品列表
     */
    @Override
    public List<Good> getAllGoods() {
        // 尝试从Redis缓存中获取商品信息
        String strJson = stringRedisTemplate.opsForValue().get("goods");

        // 若缓存存在，解析JSON并返回
        if (strJson != null) {
            JSONArray objects = JSONUtil.parseArray(strJson);
            return JSONUtil.toList(objects, Good.class);
        }

        // 若缓存不存在，从数据库查询
        List<Good> goods = list();

        // 注意：此处缺少缓存写入逻辑，可能导致后续请求重复查询数据库
        // 建议添加：stringRedisTemplate.opsForValue().set("goods", JSONUtil.toJsonStr(goods));

        return goods;
    }
}